﻿var queue_id = null;
var state = "{{queue_state}}";
var size = "{{people_inline}}";
var statistics = "{{statistics}}";
var ext = "0";
var queue_name = "{{queue_name}}";
var logout_url = "";
var update_interval = "";
var SOCKET = null;
var QUEUES = null;

// first when loading the page
function init(lu, admin, qtype) {
	admin_name = admin;
	logout_url = lu;
	queue_type = qtype;

	get_queues();
}

function open_channel(token) {
	if (SOCKET != null) {
		SOCKET.close();
	}
	var channel = new goog.appengine.Channel(token);
	SOCKET = channel.open();
	SOCKET.onopen = onOpened;
	SOCKET.onmessage = onMessage;
	SOCKET.onerror = onError;
	SOCKET.onclose = onClose;
}

onOpened = function() {
	// alert("onOpened");
};

onMessage = function(m) {
	update_all_queue_info(m.data);
}

function update_all_queue_info(data) {
	all_queue_info = JSON.parse(data)
	update_queue_size(all_queue_info["size"]);
	update_users_table(all_queue_info["users"]);
	update_stats(all_queue_info["stats"]);
	update_queue_data(all_queue_info["data"]);
}

onError = function() {
	// alert("onError");
};

onClose = function() {
	if (SOCKET != null) {
		SOCKET.close();
		SOCKET = null;
	}
	// alert("onClose");
};

// functions

function get_all_curr_queue_data() {
	get_queue_size();
	get_statistics();
	get_queue_users();
	get_queue_data();
}

// update automaticly function
/*
 * (function() { if (queue_id != "{{queue_id}}") { update_all(); }
 * setTimeout(arguments.callee, update_interval); })();
 */

function update_queue_size(size) {
	if (size != "0") {
		document.getElementById('call').href = 'javascript:call();';
		$('#call').removeAttr('data-toggle');
		document.getElementById('call_m').href = 'javascript:call();';
		$('#call_m').removeAttr('data-toggle');
	} else {
		document.getElementById('call').href = '#alert';
		$('#call').attr('data-toggle', 'modal');
		document.getElementById('call_m').href = '#alert';
		$('#call_m').attr('data-toggle', 'modal');
	}
	$('#size').text(size);
	$('#size_m').text("גודל התור: " + size);
}

function get_queue_size() {
	$.get('get_size?queue_id=' + queue_id, function(data) {
		update_queue_size(data);
	});
}

function update_stats(data) {
	stats = data.split(" ")
	var last_avg_time = stats[0];
	var avg_time = stats[1];
	var longest_wait = stats[2];
	var shortest_wait = stats[3];

	document.getElementById('statistics').innerHTML = "<p>זמן ההמתנה הממוצע (5 לקוחות אחרונים): "
			+ last_avg_time
			+ " שניות<br>זמן המתנה ממוצע כללי: "
			+ avg_time
			+ " שניות"
			+ "<br>זמן ההמתנה הקצר ביותר: "
			+ longest_wait
			+ " שניות<br> זמן ההמתנה הארוך ביותר:"
			+ shortest_wait
			+ " שניות</p>";
	document.getElementById('statistics_m').innerHTML = "<p>זמן ההמתנה הממוצע (5 לקוחות אחרונים): "
			+ last_avg_time
			+ " שניות<br>זמן המתנה ממוצע כללי: "
			+ avg_time
			+ " שניות"
			+ "<br>זמן ההמתנה הקצר ביותר: "
			+ longest_wait
			+ " שניות<br> זמן ההמתנה הארוך ביותר:"
			+ shortest_wait
			+ " שניות</p>";
}

function get_statistics() {
	$.get("/get_queue_statistics?queue_id=" + queue_id, function(data) {
		update_stats(data);
	});
}

function update_users_table(data) {
	var users_data = data;
	var data = "";
	var size = users_data["size"];
	var identifier = users_data["id"];

	var table_header = "<table class=\"table table-bordered table-hover\"> "
			+ "<caption>ישנם " + size + "אנשים בתור </caption> " + "<thead> "
			+ "<tr> " + "<th style=\"text-align:right\">מיקום</th> "
			+ "<th style=\"text-align:right\">" + identifier + "</th>"
			+ "<th style=\"text-align:right\">טלפון</th> " + "</tr>"
			+ "</thead>" + "<tbody>";
	var table_tail = "</tbody></table>";

	var table_rows = "";
	var queues_users = users_data["users"];
	for ( var i = 0; i < queues_users.length; i++) {
		var pos = queues_users[i]["pos"];
		var name = queues_users[i]["name"];
		var phone = queues_users[i]["phone"];
		var table_row = "<tr><th style='text-align:right'>" + pos
				+ "</th><td style='text-align:right'>" + name
				+ "</td><td style='text-align:right'>" + phone + "</td></tr>\n";
		table_rows += table_row;
	}

	document.getElementById('users_table').innerHTML = table_header
			+ table_rows + table_tail;
}

function get_queue_users() {
	$.get("/get_queue_users?queue_id=" + queue_id, function(data) {
		update_users_table(JSON.parse(data));
	});
}

function get_extention() {
	var cq = document.cookie;
	var start = cq.indexOf("CQ_ext=");
	if (start != -1) {
		var end = cq.indexOf(";", start);
		if (end == -1)
			end = cq.length;
		var e = cq.substring(start + 7, end);
		if (e == "0") {
			$('#name').text(queue_name);
			document.getElementById('current_queue_m').innerHTML = queue_name
					+ ' <span class="caret"></span>';

		} else {
			ext = e;
			$('#name').text(queue_name + " (שלוחה " + e + ") ");
			document.getElementById('current_queue_m').innerHTML = queue_name
					+ " (שלוחה " + e + ") " + ' <span class="caret"></span>';

			// $('#current_queue_m').text(queue_name + " (שלוחה " + e + ") ");
			// do mobile as well!
		}
	} else {
		$('#name').text(queue_name);
	}
}

function update_buttons() {

	if (state == "Non-active") {
		document.getElementById("add").href = '#alert';// $("#add").hide();
		$('#add').attr('data-toggle', 'modal');
		document.getElementById("add_m").href = '#alert';// $("#add_m").hide();
		$('#add_m').attr('data-toggle', 'modal');

		$('#op').attr('title', 'הפעל התור');
		$('#op_m').attr('title', 'הפעל התור');

	} else {
		document.getElementById("add").href = 'javascript:add()';// $("#add").show();
		$('#add').removeAttr('data-toggle');
		document.getElementById("add_m").href = 'javascript:add();';// $("#add_m").show();
		$('#add_m').removeAttr('data-toggle');

		$('#op').attr('title', 'עצור התור');
		$('#op_m').attr('title', 'עצור התור');
	}

	if (size == "0") {
		document.getElementById('call').href = '#alert';
		$('#call').attr('data-toggle', 'modal');
		document.getElementById('call_m').href = '#alert';
		$('#call').attr('data-toggle', 'modal');
	} else {
		document.getElementById('call').href = 'javascript:call();';
		$('#call').removeAttr('data-toggle');
		document.getElementById('call_m').href = 'javascript:call();';
		$('#call_m').removeAttr('data-toggle');
	}
	$('#btn_group').show();
	$('#btn_group_m').show();
	$('#del').show();
	$('#del_m').show();
	$('#call').show();
	$('#call_m').show();
}

function update_queues_list(data) {
	var list_html = "";
	var list_m_html = "";
	var queues_data = JSON.parse(data);
	QUEUES = new Array();

	if (queues_data.length == 0) {
		document.getElementById('delete_message').innerHTML = "<h4>אין לך תורים <br>ליצירת תור חדש לחץ על הכפתור \'תור חדש\'</h4>";
		$('#queue_data').hide();
		$('#delete_message').show();
		document.getElementById('delete_message_m').innerHTML = "<h4>אין לך תורים <br>ליצירת תור חדש לחץ על כפתור ה\'פלוס\'</h4>";
		$('#queue_data_m').hide();
		$('#delete_message_m').show();
		return;
	}

	for ( var i = 0; i < queues_data.length; i++) {
		var name = (queues_data[i]["name"]);
		var queue_id = queues_data[i]["id"];
		QUEUES.push(queue_id);
		list_html += '<li><div class="row-fluid nav-tabs"><a class="btn span3" data-toggle="tooltip" title="מחק תור" href="javascript:delete_queue(\''
				+ queue_id
				+ '\')"><img src="/img/1378081752_trash.png" width="25" height="25"></img></a><a class="btn span9" style="text-align:right;" onclick="choose_queue(\''
				+ queue_id + '\')">' + name + '</a></div></li>';
		list_m_html += '<li><a style="text-align:right;" href="javascript:choose_queue(\''
				+ queue_id + '\');">' + name + '</a></li>';
	}
	document.getElementById('list').innerHTML = list_html;
	document.getElementById('list_m').innerHTML = list_m_html;
}

function get_queues() {
	$.get('/get_queues', function(data) {
		update_queues_list(data);
		if (QUEUES.length > 0 && queue_id == null) {
			choose_queue(QUEUES[0]);
		}
	});

}

function update_queue_data(data) {
	queue_data = data;
	$('#size').text(queue_data["size"]);
	$('#size_m').text("גודל התור: " + queue_data["size"]);
	$('#size').show();
	$('#size_m').show();
	if (queue_data["status"] == "Active") {
		document.getElementById("name").style.color = "green";
		document.getElementById("current_queue_m").style.color = "green";
	} else {
		document.getElementById("name").style.color = "red";
		document.getElementById("current_queue_m").style.color = "red";
	}
	$('#id').text(data["queue_id"]);
	$('#id_m').text(data["queue_id"]);
	queue_name = queue_data["name"].replace(/-/g, " ");
	$('#name').text(queue_name);
	$('#add_user_header').text(queue_name);
	document.getElementById('current_queue_m').innerHTML = queue_name
			+ ' <span class="caret"></span>';
	if (queue_data["curr_name"] == "None") {
		$('#served').text("אין");
		$('#served_m').text("משתמש נוכחי: אין");
		$('#phone').text("אין");
		$('#phone_m').text("מספר טלפון: אין");
	} else {
		curr_user = queue_data["curr_name"].replace(/-/g, " ")
		$('#served').text(curr_user);
		$('#served_m').text("משתמש נוכחי: " + curr_user);
		if (queue_data["curr_phone"] == "x") {
			$('#phone').text("לא הוזן");
			$('#phone_m').text("מספר טלפון: לא הוזן");
		} else {
			$('#phone').text(queue_data["curr_phone"]);
			$('#phone_m')
					.text(
							"מספר טלפון "
									+ queue_data["curr_phone"].replace(/;/g,
											" "));
		}
	}
	queue_type = queue_data["type"];
	update_add_user_modal();
	get_extention();
	update_buttons();
	$('#queue_data').show();
	$('#queue_data_m').show();
	$('#delete_message').hide();
	$('#delete_message_m').hide();
	$('#background').attr("src", "/get_image?queue_id=" + queue_id);
}

function get_queue_data(name) {
	$.get('get_queue_data?queue_id=' + queue_id, function(data) {
		var queue_data = JSON.parse(data);
		update_queue_data(queue_data);
		open_channel(queue_data["token"]);
	});
}

function choose_queue(name) {
	queue_id = name;
	get_all_curr_queue_data();
}
// changing the background picture
function readURL(input) {
	if (input.files && input.files[0]) {
		var reader = new FileReader();
		reader.onload = function(e) {
			$('#background').attr('src', e.target.result);
		};
		reader.readAsDataURL(input.files[0]);
	}
}

$("#imgInp").change(function() {
	readURL(this);
});

$('#remove').click(function() {
	$('#imgInp').val('');
	$('#background').attr('src', "/get_image?queue_id=" + queue_id);
});

// sending the image to database
$('#form1').submit(
		function() { // listen for submit event

			$('<input />').attr('type', 'hidden').attr('name', 'queue_id')
					.attr('value', queue_id).appendTo('#form1');

			return true;

		});

// adding new customer
function add() {
	$("#add_user").modal("show");
}

function close_add() {
	$("#add_user").modal("hide");
}

// actual action of adding
$('#user_data').submit(
		function() {
			$("#add_user").modal("hide");

			var name = (document.forms["user_data"]["user_name"].value)
					.toString();
			var phone = (document.forms["user_data"]["user_phone"].value)
					.toString();
			if ((name != "") || (queue_type == "2")) {
				// here we add to queue
				$.get('manual_join?queue_id=' + queue_id + "&user_name=" + name
						+ "&user_phone=" + phone, function(data) {
					// update_queues_list(data);
					// window.alert("לקוח התווסף לתור בהצלחה");
				});
			} else {
				window.alert("אין להשאיר את שדה השם ריק. הפעולה נכשלה");
			}
			$('input[name=user_name]').val('');
			$('input[name=user_phone]').val('');
			return false;
		});

function call() {
	$.get('del_user?queue_id=' + queue_id + "&ext=" + ext, function(data) {
		/*
		 * var temp = new Array(); temp = data.split(' '); if (temp[0] == "0") {
		 * $('#call').attr('data-toggle', 'modal');
		 * document.getElementById('call').href = '#alert';
		 * 
		 * $('#call_m').attr('data-toggle', 'modal');
		 * document.getElementById('call_m').href = '#alert'; }
		 * $('#size').text(temp[0]); $('#size_m').text("גודל התור: " + temp[0]);
		 * 
		 * $('#served').text(temp[1].replace(/-/g, " "));
		 * $('#served_m').text("משתמש נוכחי: " + temp[1].replace(/-/g, " "));
		 * 
		 * if (temp[2] == "x") { $('#phone').text("לא הוזן");
		 * $('#phone_m').text("מספר טלפון: לא הוזן"); } else {
		 * $('#phone').text(temp[2]); $('#phone_m').text("מספר טלפון: " +
		 * temp[2]); }
		 */
	});
	// get_statistics();
}

function update_extension() {
	var ext = document.getElementById('extension_num').value;
	var r = window.confirm('אתה עומד לשנות את מספר השלוחה');

	if (r == true) {
		var regex = /[^0123456789]/;
		if (regex.test(ext)) {
			alert('הפעולה נכשלה. יש להזין רק מספרים');
		} else {
			document.cookie = "CQ_ext=" + escape(ext);
			// displays to mobile as well

			if (ext == "0") {
				$('#name').text(queue_name);
				document.getElementById('current_queue_m').innerHTML = queue_name
						+ ' <span class="caret"></span>';
				// $('#current_queue_m').text(queue_name);
			} else {
				$('#name').text(queue_name + " (שלוחה " + ext + ") ");
				document.getElementById('current_queue_m').innerHTML = queue_name
						+ " (שלוחה "
						+ e
						+ ") "
						+ ' <span class="caret"></span>';
				// $('#current_queue_m').text(queue_name + " (שלוחה " + e + ")
				// ");
			}
		}
	}

	$('input[name=extention]').val('');
}

function operate() {
	$.get('operate_queue?queue_id=' + queue_id, function(data) {
		state = data;
		if (state == "Active") {
			document.getElementById("name").style.color = "green";
			document.getElementById("current_queue_m").style.color = "green";
			// $('#name').attr('style', 'color:green;');
			// take care of mobile

		} else {
			document.getElementById("name").style.color = "red";
			document.getElementById("current_queue_m").style.color = "red";
			// $('#name').attr('style', 'color:red;');
			// take care of mobile

		}
		update_buttons();
	});
}

function print_qr() {
	window.open('/print_qr?queue_id=' + queue_id + "&type=" + queue_type,
			'_blank');
	// self.location = '/print_qr?queue_id=' + queue_id + "&type=" + queue_type;
}

function logoutCheck() {
	$
			.get(
					'logout_check?queue_id=' + queue_id,
					function(data) {
						if (data == "False") {
							var r = window
									.confirm('בחרת להתנתק מהמערכת בעוד שקיים תור אחד או יותר שעדיין פעיל ואינו ריק.\n'
											+ 'התנתקות במצב שכזה עלולה לגרום לנזק תדמיתי ואינה מומלצת.\n'
											+ 'מידע נוסף ניתן למצוא בדף המידע תחת הכותרת "התנתקות". האם ברצונך להמשיך?');
							if (r == true) {
								self.location = logout_url;
							}
							// window.alert("Queue MUST be empty and terminated
							// prior logout ! ");
						} else {
							var r = window
									.confirm('אתה עומד להתנתק מהמערכת. האם ברצונך להמשיך?');
							if (r == true) {
								self.location = logout_url;
							}
						}
					});
}

function delete_queue(delete_queue_id) {

	var r = window.confirm('אתה עומד למחוק את התור. האם ברצונך להמשיך?');
	if (r == true) {
		if (delete_queue_id == 'mobile') {
			delete_queue_id = queue_id;
		}
		$
				.get(
						'/delete_queue?queue_id=' + delete_queue_id,
						function(data) {
							document.getElementById('delete_message').innerHTML = '<h4 style="text-align: right;"> התור '
									+ data
									+ ' נמחק בהצלחה </h4><h5 style="text-align:right;"> בחר תור </h5>';
							$('#queue_data').hide();
							$('#delete_message').show();
							document.getElementById('delete_message_m').innerHTML = '<h4 style="text-align: right;"> התור '
									+ data
									+ ' נמחק בהצלחה </h4><h5 style="text-align:right;"> בחר תור </h5>';
							$('#queue_data_m').hide();
							$('#delete_message_m').show();
							get_queues();
						});
	}
}

function launch_manual() {
	window.open('/manual_page?queue_id=' + queue_id + "&type=" + queue_type,
			'_blank');
}

function update_add_user_modal() {
	if (queue_type == "0") {
		$('#add_user_user_type').text("הכנס את שמך");
		$('#add_user_user_type_input').attr("placeholder", "שם פרטי ומשפחה");
		$('#add_user_user_type').show();
		$('#add_user_user_type_input').show();
	}
	if (queue_type == "1") {
		$('#add_user_user_type').text("הכנס מספר ת.ז");
		$('#add_user_user_type_input').attr("placeholder", "מספר ת.ז");
		$('#add_user_user_type').show();
		$('#add_user_user_type_input').show();
	}
	if (queue_type == "2") {
		$('#add_user_user_type').hide();
		$('#add_user_user_type_input').hide();
	}
}

function hide_more() {
	$("#otherOp").hide();
	$("#otherOperationClick").attr("href", "javascript:show_more()");
	document.getElementById("otherOperationClick").innerHTML = "הצג פעולות נוספות";
	$("#otherOp_m").hide();
	$("#otherOperationClick_m").attr("href", "javascript:show_more()");
	document.getElementById("otherOperationClick_m").innerHTML = "הצג פעולות נוספות";
}

function show_stats() {
	$("#statisticBlock").show();
	$("#statisticBlockClick").attr("href", "javascript:hide_stats()");
	document.getElementById("statisticBlockClick").innerHTML = "הסתר סטטיסטיקה";
	$("#statisticBlock_m").show();
	$("#statisticBlockClick_m").attr("href", "javascript:hide_stats()");
	document.getElementById("statisticBlockClick_m").innerHTML = "הסתר סטטיסטיקה";
}

function hide_stats() {
	$("#statisticBlock").hide();
	$("#statisticBlockClick").attr("href", "javascript:show_stats()");
	document.getElementById("statisticBlockClick").innerHTML = "הצג סטטיסטיקה";
	$("#statisticBlock_m").hide();
	$("#statisticBlockClick_m").attr("href", "javascript:show_stats()");
	document.getElementById("statisticBlockClick_m").innerHTML = "הצג סטטיסטיקה";
}